/**
 * Generali Solutions d'assurances - Tous droits réservés &copy; 2007 - 2010
 */
package fr.generali.accueilclient.services;

import static org.junit.Assert.assertEquals;

import java.util.List;

import junit.framework.AssertionFailedError;

import org.easymock.EasyMock;
import org.junit.Test;
import org.unitils.UnitilsJUnit4;
import org.unitils.easymock.EasyMockUnitils;
import org.unitils.easymock.annotation.Mock;
import org.unitils.inject.annotation.InjectInto;
import org.unitils.inject.annotation.InjectIntoByType;
import org.unitils.inject.annotation.TestedObject;
import org.unitils.spring.annotation.SpringApplicationContext;

import fr.generali.accueilclient.client.assembler.input.ClientRecherche2RechercherPersonnesGeneriqueConverter;
import fr.generali.accueilclient.client.om.IPersonne;
import fr.generali.accueilclient.client.om.impl.ClientRecherche;
import fr.generali.accueilclient.client.services.impl.ClientServiceMapper;
import fr.generali.accueilclient.client.services.impl.RechercheClientService;
import fr.generali.accueilclient.commun.exception.AccueilClientBusinessException;
import fr.generali.refservcommuns.rce.searchgenerique.recherchepersonnegeneriqueservice.RechercherPersonnesGeneriqueResponse;
import fr.generali.refservcommuns.rce.searchgenerique.services.IRecherchePersonneGeneriqueWebService;
import fr.generali.refservcommuns.rce.searchgenerique.services.TechnicalFault;
import fr.generali.refservcommuns.rce.searchgenerique.services.WsRceBusinessException;

/**
 * Ce test par Lecture et recherche client
 */
@SpringApplicationContext({"classpath:/fr/generali/accueilclient/services/applicationContext-services-rce-test.xml" })
public class ClientServiceAutreTestInt extends UnitilsJUnit4 {

    /**
     * Constantes de critère de recherche : NOM
     */
    private static final String RECHERCHE_NOM = "MAURICE";

    /**
     * Constantes de critère de recherche : CODE POSTAL
     */
    private static final String RECHERCHE_CODE_POSTAL = "93210";

    /**
     * Constantes de critère de recherche : SIRET
     */
    private static final String RECHERCHE_SIRET = "12345678910";

    /**
     * Le service RCE P2bis mocké
     */
    @Mock
    @InjectIntoByType
    private IRecherchePersonneGeneriqueWebService p2bis;

    /**
     * Mapper des résultats
     */
    @Mock
    @InjectIntoByType
    private ClientServiceMapper clientServiceMapper;

    /**
     * Recherche générique
     */
    @Mock
    @InjectInto(property = "clientRecherche2RechercherPersonnesGeneriqueConverter")
    private ClientRecherche2RechercherPersonnesGeneriqueConverter clientCriteresGeneriqueConverter;

    /**
     * Le service BC testé
     */
    @TestedObject
    private RechercheClientService rechercheClientService;

    /**
     * @throws AccueilClientBusinessException .
     */
    @Test
    public void testRechercherClientGenerique() throws AccueilClientBusinessException {

        RechercherPersonnesGeneriqueResponse response = null;
        ClientRecherche clientRecherche = new ClientRecherche();
        clientRecherche.setNom(RECHERCHE_NOM);
        clientRecherche.setCodePostal(RECHERCHE_CODE_POSTAL);
        clientRecherche.setSiret(RECHERCHE_SIRET);

        List<IPersonne> client = null;
        try {
            EasyMock.expect(clientCriteresGeneriqueConverter.convert(null)).andReturn(null).atLeastOnce();
            EasyMock.expect(p2bis.rechercherPersonnesGenerique(null)).andReturn(response).atLeastOnce();
            EasyMock.expect(clientServiceMapper.mapperRechercheClientGenerique(null)).andReturn(null).atLeastOnce();
            EasyMockUnitils.replay();
        } catch (TechnicalFault e) {
            new AssertionFailedError(e.getMessage());
        } catch (WsRceBusinessException e) {
            new AssertionFailedError(e.getMessage());
        }

        /* test sans critères de recherche */
        client = rechercheClientService.rechercherClientGenerique(null);
        assertEquals(client, response);
        /* test avec critères de recherche */
        client = rechercheClientService.rechercherClientGenerique(clientRecherche);
        assertEquals(client, response);

    }
}
